/** 应用程序全局配置
 * @file config.hpp
 * @author Kiven Lee
 * @version 1.0
 * @date 2021-08-08
 *
 * @copyright Copyright Kivensoft (c) 2021
 *
 */
#pragma once

#include <winsock2.h>
#include <windows.h>

#include <wke.h>

#include "klib/utils.hpp"
#include "kwin/strconv.hpp"
#include "kwin/utils.hpp"
#include "vlcwnd.hpp"

#define WM_VLC_PLAYER (WM_USER + 0x400)

namespace miniplayer {

    enum class PlayState: WPARAM { stop, play, play_url, pause };

    class Config {

    private:
        static inline bool _debug = false;
        static inline std::string _listen;
        static inline std::string _work;
        static inline std::string _webroot;
        static inline std::string _node_dll;
        static inline std::string _index_html;

    public:
        /** 应用程序名称 */
        static inline const char app[] = "miniplayer";
        /** 应用程序版本 */
        static inline const char ver[] = "1.0.0";
        /** 应用程序描述 */
        static inline const char desc[] = "迷你播放器";

        /** 调试标志 */
        static bool get_debug() { return _debug; }
        /** 浏览器动态库名称 */
        static inline std::string_view get_node_dll() { return _node_dll; }
        /** 浏览器显示的首页地址相对路径 */
        static inline std::string_view get_index_html() { return _index_html; }

        /** 解析命令行, 返回false表示解析失败，程序应当要主动结束 */
        static bool parse(int argc, char* const argv[]);
        /** 打印使用帮助 */
        static void usage();

        /** 显示对话框信息 */
        static inline int messagebox(const char* utf8_message, UINT uType = MB_OK) {
            kwin::ansi_chars_t msg(utf8_message), title(app);
            return ::MessageBox(main_hwnd, msg.c_str(), title.c_str(), uType);
        }

        /** 显示格式化信息的对话框 */
        template<UINT TYPE = MB_OK, typename... ARGS>
        static inline int msgbox(const char* u8_fmt, ARGS&&... args) {
            klib::dstring_t<256> buf(u8_fmt, std::forward<ARGS>(args)...);
            return messagebox(buf.data(), TYPE);
        }

        // 应用程序运行时全局单例对象
        static inline HINSTANCE hinstance = nullptr;
        static inline HWND main_hwnd = nullptr;
        static inline wkeWebView wke_web_view = nullptr;
        static inline VlcPlayer vlc_player;
    };


} // namespace ai